#str 字符串

## 字符串常量
'a'             #单双引号没什么区别，注意需要显示的时候可以交替使用，或者用转义字符直接解决
'123'
"a"
"123"
'''123'''       #三引号可以跨行表示字符串，也用来表示跨行的注释
"""12
3"""
r'abc\n234'     #带r和R的是Raw字符串
R'abc\n234'
u'abc'          #带u和U的是Unicode字符串
U'abc'
x=str(123)
x
x=str(u'abc123')
x

## 转义字符
'\\'
'\n'
'\''
'\"'
'\t'
'\0'    #null，空字符串

#Raw字符串
mf=open("d:\\temp\\a.py","r")
mf=open(r"d:\temp\a.py","r")        #raw字符串不会转义，打开文件更方便
mf=open("d:/temp/a.py","r")         #换成/也行

##字符串基本操作
len('abcd')

'a' in 'abc'        #True
'123' in 'abcd12'   #False

'a''b''c'           #'abc'
'a'+'b'+'c'         #'abc'
'a'*3               #'aaa'
'a','b','c'         #('a', 'b', 'c'),用逗号并不是字符串连接操作,成了元组了

for a in 'abc':
    print(a)

x='abcdef'
x[0]                #'a'
x[-1]               #'f'
x[3]                #'d'
x[0]='1'            #报错，字符串是不可变元素
x[1:4]              #'bcd' ,含头不含尾
x[1:]               #'bcdef'
x[:4]               #'abcd'
x[:-1]              #'abcde'
x[:]                #'abcdef'
x='0123456789'
x[1:7:2]            #'135'
x[::2]              #'02468'
x[7:1:-2]           #'753'
x[::-1]             #'9876543210'

str(123)            #'123'
str(1.23)           #'1.23'

##字符串方法
'abc'.capitalize()

'ababababababa'.count('ab')
'ababababababa'.count('ab',2)

'abcabcabc'.endswith('bc')
'abcabcabc'.endswith('bc',0,4)
'abcabcabc'.startswith('bc')

"abc\tjkl\tda".expandtabs()         #默认8个字符串tab一组，不够用空格补全
"abc\tjkl\tda".expandtabs(4)

'abcdef'.find("bc")             #1      find可以换成index，不过index找不到会返回ValueError异常
'abcdef'.find("g")              #-1
'abcdabcd'.find("bc",2)         #5
'abcdabcd'.rfind("bc")          #5,倒着找，rindex类似

'My name is {0},age is {1}'.format('Tom',23)
'My name is {name},age is {age}'.format_map({"name":"Tom","age":23})

'abc'.isalnum()                 #是否由字母或数字组成
'abc'.isalpha()                 #是否全由字母组成
'123'.isdecimal()               #是否全由数字组成
'123'.isdigit()                 #是否全由数字组成
'123'.isnumeric()               #是否全由数字组成
'abc'.islower()                 #是否全是小写字母
'abc'.isupper()                 #是否全是大写字母
"   ".isspace()                 #是否全是空格
'abc'.ljust(8)                  #字符不够末尾填充
'abc'.rjust(8)                  #字符不够开头填充
'AbC'.lower()                   #转小写
'AbC'.upper()                   #转大写
'\n\r  abc \n\r'.strip()        #删除首尾空格
'acbcdabc'.strip('ac')          #'bcdab'删除首尾包含内容的字符，lstrip rstrip类似
'abc123abc123abc'.partition("12")       #('abc', '12', '3abc123abc'),用参数把内容分为三部分
'abc123abc123abc'.rpartition("12")      #('abc123abc', '12', '3abc'),用参数把内容分为三部分，倒着找
'abc123abc123abc'.replace('ab','d')     #'dc123dc123dc'
'abc123abc123abc'.replace('abc','d',2)  #'d123d123abc',只替换两次
'abc123abc123abc'.split("abc")          #['', '123', '123', '']
'AbC'.swapcase()                        #'aBc'大小写互换
'abc'.zfill(8)                          #开头填充0，有加减号在加减号之后填充

## 字符串格式化表达式
"The %s's price is %4.2f" % ('apple',2.5)   #"The apple's price is 2.50"
'%s %s %s' % (123,1.23,'abc')               #'123 1.23 abc'
'%r %r %r' % (123,1.23,'abc')               #"123 1.23 'abc'"
'123%c %c' % ('a',65)                       #'123a A'

'%d %d' % (123,1.56)            #'123 1'
'%6d' % 123                     #'   123'
'%-6d' % 123                    #'123   '
'%06d' % 123                    #'000123'
'%-06d' % 123                   #'123   '       倒着填充0是无效的
'%+06d' % -123                  #'-00123'       +表示显示符号，默认以空格填充，此处以0填充
                                #将d换成o表示八进制，x或X表示十六进制

x=12.3456789
'%e %f %g' % (x,x,x)            #'1.234568e+01 12.345679 12.3457'
'%E %F %G' % (x,x,x)            #'1.234568E+01 12.345679 12.3457'
x=12.345e10
'%e %f %g' % (x,x,x)            #'1.234500e+11 123450000000.000000 1.2345e+11'
'%E %F %G' % (x,x,x)            #'1.234500E+11 123450000000.000000 1.2345E+11'

'%(name)s is %(age)d years old' % {"name":"Tom","age":8}


## byges字符串
#byte仅能表示ASCII字符组成的串，汉字就不行了
x = b'abc'
type(x)         #bytes
# b'汉字'       #错误
x[0]            #97
























